/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fachada;

import entidades.Administrador;
import entidades.Cliente;
import entidades.Proveedor;
import entidades.Servicio;
import entidades.Usuario;
import java.util.List;
import javax.ejb.Stateless;
import session.*;

/**
 *
 * @author SergioAlberto
 */
@Stateless
public class Fachada implements FachadaLocal {

    //Sergio
    private UsuarioFacade usuarios;
    //Roberto
    private ClienteFacade clientes;
    //Roberto
    private ProveedorFacade proveedor;
    //Jose
    private AdministradorFacade administrador;

    public Fachada() {
        usuarios = new UsuarioFacade();
        clientes = new ClienteFacade();
        proveedor = new ProveedorFacade();
        administrador = new AdministradorFacade();
    }

    @Override
    public String crearUsuario(Usuario usuario) {
        try {
            usuarios.create(usuario);
            return null;
        } catch (Exception e) {
            return e.getMessage();
        }
    }

    @Override
    public String crearProveedor(Proveedor proveedor) {
        try {
            this.proveedor.create(proveedor);
            return null;
        } catch (Exception ex) {
            return ex.getMessage();
        }
    }

    @Override
    public String crearAdministrador(Administrador administrador) {
        try {
            this.administrador.create(administrador);
            return null;
        } catch (Exception ex) {
            return ex.getMessage();
        }
    }

    @Override
    public String crearCliente(Cliente cliente) {
        try {
            this.clientes.create(cliente);
            return "";
        } catch (Exception ex) {
            return ex.getMessage();
        }
    }

    @Override
    public String actualizaUsuario(Usuario usuario) {
        try {
            Usuario user = usuarios.find(usuario);
            if (user != null) {
                user.setNombre(usuario.getNombre());
                user.setClave(usuario.getClave());
                user.setCelular(usuario.getCelular());
                user.setCorreo(usuario.getCorreo());
                user.setRegID(usuario.getRegID());
                user.setTelefono(usuario.getTelefono());
                user.setTipoUsuario(usuario.getTipoUsuario());
                usuarios.edit(user);
                return null;
            }
            return "El usuario no existe";
        } catch (Exception e) {
            return e.getMessage();
        }
    }

    @Override
    public String actualizaProveedor(Proveedor proveedor) {
        try {
            Proveedor provBD = this.proveedor.find(proveedor);
            if (provBD != null) {
                provBD.setId(proveedor.getId());
                provBD.setIdUsuario(proveedor.getIdUsuario());
                provBD.setPromedio(proveedor.getPromedio());
                provBD.setCodigoPostal(proveedor.getCodigoPostal());
                this.proveedor.edit(provBD);
                return null;
            } else {
                return "El proveedor no existe.";
            }
        } catch (Exception ex) {
            return ex.getMessage();
        }
    }

    @Override
    public String actualizaAdministrador(Administrador administrador) {
        try {
            Administrador administradorBD = this.administrador.find(administrador);
            if (administradorBD != null) {
                administradorBD.setId(administrador.getId());
                administradorBD.setIdUsuario(administrador.getIdUsuario());
                administradorBD.setNivel(administrador.getNivel());
                this.administrador.edit(administradorBD);
                return null;
            } else {
                return "El administrador no existe.";
            }
        } catch (Exception e) {
            return e.getLocalizedMessage();
        }
    }

    @Override
    public String actualizaCliente(Cliente cliente) {
        try {
            Cliente clientBD = this.clientes.find(cliente);
            if (clientBD != null) {
                clientBD.setId(cliente.getId());
                clientBD.setIdUsuario(cliente.getIdUsuario());
                clientBD.setDireccion(cliente.getDireccion());
                this.clientes.edit(clientBD);
                return null;
            } else {
                return "El cliente no existe.";
            }
        } catch (Exception ex) {
            return ex.getMessage();
        }
    }

    @Override
    public String borrarUsuario(Usuario usuario) {
        try {
            usuarios.remove(usuario);
            return null;
        } catch (Exception e) {
            return e.getMessage();
        }
    }

    @Override
    public String borrarProveedor(Proveedor proveedor) {
        try {
            this.proveedor.remove(proveedor);
            return null;
        } catch (Exception ex) {
            return ex.getMessage();
        }
    }

    @Override
    public String borrarAdministrador(Administrador administrador) {
        try {
            this.administrador.remove(administrador);
            return null;
        } catch (Exception ex) {
            return ex.getMessage();
        }
    }

    @Override
    public String borrarCliente(Cliente cliente) {
        try {
            this.clientes.remove(cliente);
            return null;
        } catch (Exception ex) {
            return ex.getMessage();
        }
    }

    @Override
    public Usuario buscarUsuario(Usuario usuario) {
        try {
            return usuarios.find(usuario);
        } catch (Exception e) {
            return null;
        }
    }

    @Override
    public Proveedor buscarProveedor(Proveedor proveedor) {
        return this.proveedor.find(proveedor);
    }

    @Override
    public Administrador buscarAdministrador(Administrador administador) {
        return this.administrador.find(administador);
    }

    @Override
    public Cliente buscarCliente(Cliente cliente) {
        return this.clientes.find(cliente);
    }

    @Override
    public List<Usuario> listarUsuarios() {
        try {
            return usuarios.findAll();
        } catch (Exception e) {
            return null;
        }
    }

    @Override
    public List<Proveedor> listarProveedores() {
        return proveedor.findAll();
    }

    @Override
    public List<Administrador> listarAdministradores() {
        return this.administrador.findAll();
    }

    @Override
    public List<Cliente> listarClientes() {
        return clientes.findAll();
    }

    @Override
    public List<Servicio> listarServicios() {
        ServicioFacade servicios = new ServicioFacade();
        return servicios.findAll();
    }
}